home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Toolbox / Visual Basic Toolbox (P.I.E.)(1996).ISO / message / subcls / clipview.frm (.txt) < prev    next >
Encoding:
Visual Basic Form  |  1995-05-31  |  5.9 KB  |  167 lines

  1. VERSION 2.00
  2. Begin Form Form1 
  3.    BackColor       =   &H8000000F&
  4.    Caption         =   "Clipboard Viewer"
  5.    ClientHeight    =   5430
  6.    ClientLeft      =   1200
  7.    ClientTop       =   2160
  8.    ClientWidth     =   7470
  9.    Height          =   5835
  10.    Left            =   1140
  11.    LinkTopic       =   "Form1"
  12.    ScaleHeight     =   5430
  13.    ScaleWidth      =   7470
  14.    Top             =   1815
  15.    Width           =   7590
  16.    Begin MsgHook MsgHook 
  17.       Left            =   6210
  18.       Top             =   225
  19.    End
  20.    Begin TextBox Text1 
  21.       Height          =   1500
  22.       Left            =   3645
  23.       MultiLine       =   -1  'True
  24.       TabIndex        =   1
  25.       Text            =   "Text1"
  26.       Top             =   90
  27.       Visible         =   0   'False
  28.       Width           =   2220
  29.    End
  30.    Begin PictureBox Picture1 
  31.       Height          =   1500
  32.       Left            =   90
  33.       ScaleHeight     =   1470
  34.       ScaleWidth      =   3090
  35.       TabIndex        =   0
  36.       Top             =   90
  37.       Width           =   3120
  38.    End
  39. Option Explicit
  40. ' Note: ALWAYS stop this application via the control
  41. '       window when running within the VB IDE!!!
  42. '       Failure to do so will corrupt the clipboard
  43. '       viewer chain.
  44. ' Static handle to next window in clipboard chain
  45. Dim hWndNext As Integer
  46. ' Static var to hold current clipboard format
  47. Dim ClipFmt As Integer
  48. Sub Form_Load ()
  49.    ' Rearrange controls and form
  50.    Text1.Visible = False
  51.    Text1.Text = ""
  52.    Picture1.Visible = False
  53.    Picture1.Top = Picture1.Left
  54.    App.Title = Me.Caption
  55.    ' Install app in viewer chain
  56.    hWndNext = SetClipboardViewer(hWnd)
  57.    ' Setup MsgHook control
  58.    MsgHook.HwndHook = Me.hWnd
  59.    MsgHook.Message(WM_CHANGECBCHAIN) = True
  60.    MsgHook.Message(WM_DRAWCLIPBOARD) = True
  61.    ' Paint whatever's in the clipboard currently
  62.    UpdateClipView
  63. End Sub
  64. Sub Form_Resize ()
  65.    ' Adjust control positions
  66.    Picture1.Move Picture1.Left, Picture1.Top, Me.Width - 2 * Picture1.Left - (Me.Width - Me.ScaleWidth), Me.Height - 2 * Picture1.Top - (Me.Height - Me.ScaleHeight)
  67.    Text1.Move Picture1.Left, Picture1.Top, Picture1.Width, Picture1.Height
  68.    ' If owner-drawn format, repaint it
  69.    If ClipFmt = CF_OWNERDISPLAY Then
  70.       UpdateClipView
  71.    End If
  72. End Sub
  73. Sub Form_Unload (Cancel As Integer)
  74.    Dim nRet As Integer
  75.    ' Remove Me from the clipboard viewer chain.
  76.    ' DO NOT stop execution from VB menu or toolbar!
  77.    nRet = ChangeClipboardChain(Me.hWnd, hWndNext)
  78. End Sub
  79. Sub MsgHook_Message (Msg As Integer, wParam As Integer, lParam As Long, Result As Long)
  80.    Dim nRet As Long
  81.    ' Take appropriate action based on incoming message.
  82.    Select Case Msg
  83.       Case WM_CHANGECBCHAIN
  84.          '
  85.          ' If the window being removed is the next window in the
  86.          ' chain, the window specified by the hwndNext parameter
  87.          ' becomes the next window and clipboard messages are
  88.          ' passed on to it.
  89.          '
  90.          If wParam = hWndNext Then
  91.             hWndNext = WordLo(lParam)
  92.          End If
  93.             
  94.       Case WM_DRAWCLIPBOARD
  95.          '
  96.          ' Contents of clipboard have changed.
  97.          ' Call routine to read.
  98.          '
  99.          UpdateClipView
  100.    End Select
  101.    ' Each window that receives the either of these messages should
  102.    ' call the SendMessage function to pass the message on to the
  103.    ' next window in the clipboard-viewer chain.
  104.    nRet = SendMessage(hWndNext, WM_CHANGECBCHAIN, wParam, lParam)
  105.    Result = 0
  106. End Sub
  107. Sub UpdateClipView ()
  108.    ReDim PriorityList(0 To 20) As Integer
  109.    Dim hWndOwner As Integer
  110.    Dim nRet As Long
  111.    Dim hGlb As Integer
  112.    Dim rView As RECT
  113.    Dim ps As PAINTSTRUCT
  114.    PriorityList(0) = CF_TEXT
  115.    PriorityList(1) = CF_BITMAP
  116.    PriorityList(2) = CF_METAFILEPICT
  117.    PriorityList(3) = CF_OEMTEXT
  118.    PriorityList(4) = CF_DSPTEXT
  119.    PriorityList(5) = CF_DSPBITMAP
  120.    PriorityList(6) = CF_DSPMETAFILEPICT
  121.    PriorityList(7) = CF_OWNERDISPLAY
  122.    ClipFmt = GetPriorityClipboardFormat(PriorityList(0), 8)
  123.    Select Case ClipFmt
  124.       Case CF_TEXT, CF_OEMTEXT, CF_DSPTEXT
  125.          Picture1.Visible = False
  126.          Text1.Text = Clipboard.GetText()
  127.          Text1.Visible = True
  128.          Me.Caption = App.Title & ": CF_TEXT"
  129.       Case CF_BITMAP, CF_DSPBITMAP
  130.          Text1.Visible = False
  131.          Picture1.Picture = Clipboard.GetData(CF_BITMAP)
  132.          Picture1.Visible = True
  133.          Me.Caption = App.Title & ": CF_BITMAP"
  134.       Case CF_METAFILEPICT, CF_DSPMETAFILEPICT
  135.          Text1.Visible = False
  136.          Picture1.Picture = Clipboard.GetData(CF_METAFILEPICT)
  137.          Picture1.Visible = True
  138.          Me.Caption = App.Title & ": CF_METAFILEPICT"
  139.       Case CF_OWNERDISPLAY
  140.          Text1.Visible = False
  141.          Call GetClientRect(Picture1.hWnd, rView)
  142.          hGlb = GlobalAlloc(GMEM_FIXED Or GMEM_ZEROINIT, Len(rView))
  143.          nRet = GlobalLock(hGlb)
  144.          Call HMemCpy(nRet, rView, Len(rView))
  145.          hWndOwner = GetClipboardOwner()
  146.          nRet = SendMessage(hWndOwner, WM_SIZECLIPBOARD, Me.hWnd, ByVal MakeLong(0, hGlb))
  147.          nRet = GlobalUnlock(hGlb)
  148.          nRet = GlobalFree(hGlb)
  149.          Picture1.Cls
  150.          Picture1.Visible = True
  151.          ps.hDC = Picture1.hDC
  152.          ps.fErase = True
  153.          ps.rcPaint = rView
  154.          hGlb = GlobalAlloc(GMEM_FIXED Or GMEM_ZEROINIT, Len(ps))
  155.          nRet = GlobalLock(hGlb)
  156.          Call HMemCpy(nRet, ps, Len(ps))
  157.          nRet = SendMessage(hWndOwner, WM_PAINTCLIPBOARD, Me.hWnd, ByVal MakeLong(0, hGlb))
  158.          nRet = GlobalUnlock(hGlb)
  159.          nRet = GlobalFree(hGlb)
  160.          Me.Caption = App.Title & ": CF_OWNERDISPLAY"
  161.       Case Else
  162.          Text1.Visible = False
  163.          Picture1.Visible = False
  164.          Me.Caption = App.Title & ": No Supported Format"
  165.    End Select
  166. End Sub
  167.